What is readline?
The readline npm package is a core Node.js module that provides an interface for reading data from a Readable stream (like process.stdin) one line at a time. It is particularly useful for creating command-line interfaces and reading large files line by line.
What are readline's main functionalities?
Reading Input from stdin
This code sets up a readline interface to read user input from the standard input (stdin). It asks the user 'What is your name?' and prints a greeting with the user's input.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What is your name? ', (answer) => {
console.log(`Hello, ${answer}!`);
rl.close();
});
Reading a File Line by Line
This example demonstrates how to use readline to read a file line by line. It creates a readline interface with a file stream as input and logs each line to the console as it is read.
const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('file.txt'),
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
console.log(line);
});
Other packages similar to readline
readline-sync
readline-sync is an npm package that provides synchronous readline capabilities. Unlike the asynchronous nature of readline, readline-sync blocks the event loop until input is received. This is useful for CLI applications where synchronous operations are preferred.
inquirer
Inquirer.js is a powerful library for building interactive command-line interfaces. It offers more features than readline, such as checkboxes, lists, confirmations, and more. It is more suitable for complex CLI applications that require more than just line-by-line input.
readline
Read a file line by line.
Install
Important. In node 10 there is a core module named readline. Please use linebyline instead, it is the same module just renamed:
Npm linebyline
npm install linebyline
Test
npm install .
npm test
What's this?
Simple streaming readline module for NodeJS. Reads a file and buffers new lines emitting a line event for each line.
Usage
Simple
var readline = require('linebyline'),
rl = readline('./somefile.txt');
rl.on('line', function(line, lineCount, byteCount) {
})
.on('error', function(e) {
});
ASCII file decoding
As the underlying fs.createReadStream
doesn't care about the specific ASCII encoding of the file, an alternative way to decode the file is by telling the readline
library to retain buffer and then decoding it using a converter (e.g. iconv-lite
).
var readline = require('linebyline'),
rl = readline('./file-in-win1251.txt', {
retainBuffer: true
});
rl.on("line", function (data,linecount){
var line = iconv.decode(data, 'win1251');
});
##API
readLine(readingObject[, options])
Params:
readingObject
- file path or stream objectoptions
can include:
maxLineLength
- override the default 4K buffer size (lines longer than this will not be read)retainBuffer
- avoid converting to String prior to emitting 'line' event; will pass raw buffer with encoded data to the callback
Return:
License
BSD © Craig Brookes